//+------------------------------------------------------------------------------------------------------------------+
#property description                                                                                    "[XU-ADR D1]"
#define Version                                                                                          "[XU-ADR D1]"
//+------------------------------------------------------------------------------------------------------------------+
#property link        "https://forex-station.com/viewtopic.php?p=1295409935#p1295409935"
#property description "THIS IS A FREE INDICATOR"
#property description "                                                      "
#property description "Welcome to XARD UNIVERSE"
#property description "Let light shine out of darkness and illuminate your world"
#property description "and with this freedom leave behind your cave of denial"
#property indicator_chart_window
#include <WinUser32.mqh>
string ID,xTimeFrame                     = "Current time frame";
extern string Indicator                  = Version;
//+------------------------------------------------------------------------------------------------------------------+
  extern bool AutoRefresh                = true;//XARD: Req for lines to Auto Draw Next Day
  extern ENUM_TIMEFRAMES RefreshPeriod   = PERIOD_D1; int hWindow=0,oldBars=0;
//+------------------------------------------------------------------------------------------------------------------+
extern string STR01                      = "<<<==== [01] Open Postion level Settings ====>>>";
  extern bool showOpenPoslevels          = true;  double yClose,wClose; int LABELmove=0;
       double OpenPosPercent             = 18.75; double OpenToday,CloseToday,ADR1,ADR5,ADR10,ADR20,ADRavg;
//+------------------------------------------------------------------------------------------------------------------+
extern string STR02                      = "<<<==== [02] ADR% Target Settings ====>>>";
       extern ENUM_TIMEFRAMES TimeFrame  = PERIOD_D1;
  extern bool showTARGETS                = true,showOpenClose=true,ShowPrevHiLo=true,showADRlines=false,
              showOpenPoslines           = false,showOpenline=true,showCloseline=false,showMidlines=false;
extern double lvl1                       = 23.6,lvl2=38.2,lvl3=61.8,lvl4=76.4,lvl5=100.,lvl6=127.,lvl7=161.8,lvl8=200.; 
 extern color Previous                   = clrAqua,ADRColUP=clrSnow,ADRColDN=clrSnow,
              OpenBUY                    = clrAqua,OpenSELL=clrHotPink;
   extern ENUM_LINE_STYLE PrevOpenStyle  = STYLE_DASH;
   extern int OrderLineWidth             = 3,ADRLineWidth=2,TextSize=12;
       double RayLength                  = 0;
       extern ENUM_LINE_STYLE ADRStyle   = STYLE_DOT; bool TX=false;
       double DecNos,CLOSE,myPoint,mPoint; string FontType="Arial Black",SymPair=""; int pipsize;
       double SetPoint(){if(Digits<4) mPoint=0.01; else mPoint=0.0001; return(mPoint);}
     datetime TimeBar=0, BarTime=0;
//+----OnInit Function-----------------------------------------------------------------------------------------------+
   int OnInit(){TimeFrame = fmax(TimeFrame,_Period);  
   if(RayLength==0) RayLength=1;  xTimeFrame = stringToTimeFrame(xTimeFrame);
   ID = timeFrameToString(TimeFrame)+": X ["+(string)OpenPosPercent+"] ";   if(TextSize>4) TX=true;
   IndicatorDigits(Digits); IndicatorShortName(ID);
//+------------------------------------------------------------------------------------------------------------------+
   if(AutoRefresh)  hWindow=WindowHandle(Symbol(),Period());  oldBars=iBars(NULL,RefreshPeriod);
//+------------------------------------------------------------------------------------------------------------------+   
   if(SymPair=="") SymPair=Symbol(); myPoint=SetPoint();
        if(StringFind  (Symbol(),"JPY",0) != -1)   DecNos=2;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   DecNos=0;
   else if(StringSubstr(Symbol(),0,5)=="US500")    DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="USOUSD")   DecNos=3;
   else if(StringSubstr(Symbol(),0,4)=="HK50")     DecNos=0;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    DecNos=0;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")  DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   DecNos=1;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   DecNos=3;
   else if(StringSubstr(Symbol(),0,6)=="ASX200")   DecNos=1;
   else if(StringSubstr(Symbol(),0,5)=="DAX30")    DecNos=0;
   else if(StringSubstr(Symbol(),0,4)=="WS30")     DecNos=0; else DecNos=4;
   if(SymPair=="") SymPair=Symbol();
        if(StringFind  (Symbol(),"JPY",0) != -1)   pipsize=10;
   else if(StringSubstr(Symbol(),0,6)=="BTCUSD")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="ASX200")   pipsize=10;
   else if(StringSubstr(Symbol(),0,4)=="HK50")     pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="JP225")    pipsize=100;
   else if(StringSubstr(Symbol(),0,7)=="FTSE100")  pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="USDMXN")   pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="XAUUSD")   pipsize=10;
   else if(StringSubstr(Symbol(),0,4)=="WS30")     pipsize=100;
   else if(StringSubstr(Symbol(),0,5)=="DAX30")    pipsize=100;
   else if(StringSubstr(Symbol(),0,6)=="ASX200")   pipsize=100; else pipsize=10;
   return(INIT_SUCCEEDED);}//End OnInit
//+----deinit Function-----------------------------------------------------------------------------------------------+
   void deinit(){CleanUpIsle1();}//End deinit
//+----OnCalculate Function------------------------------------------------------------------------------------------+
   int OnCalculate(const int rates_total,
                   const int prev_calculated,
                   const datetime &time[],
                   const double &open[],
                   const double &high[],
                   const double &low[],
                   const double &close[],
                   const long &tick_volume[],
                   const long &volume[],
                   const int &spread[]){
//+---AutoRefresh----------------------------------------------------------------------------------------------------+
   if(AutoRefresh){if(oldBars<iBars(NULL,RefreshPeriod) && hWindow!=0){int message;  switch(Period()){
   case     1: message= 33137; break;  case     5: message= 33138; break;  case    15: message= 33139; break;
   case    30: message= 33140; break;  case    60: message= 33135; break;  case   240: message= 33136; break;
   case  1440: message= 33134; break;  case 10080: message= 33141; break;  default: message= 33137; break;}
   PostMessageA (hWindow,WM_COMMAND,33141,0);  PostMessageA (hWindow,WM_COMMAND,message,0);
   oldBars=iBars(NULL,RefreshPeriod);}}//End AutoRefresh
//+---MARKET CLOSE---------------------------------------------------------------------------------------------------+
   string CLOSEy=""; yClose=iClose(SymPair,1440,1); CLOSEy=(DoubleToStr(yClose,DecNos));
   string CLOSEw=""; wClose=iClose(SymPair,10080,1); CLOSEw=(DoubleToStr(wClose,DecNos));
//+---ADR------------------------------------------------------------------------------------------------------------+
   string OPEN=""; OpenToday=iOpen(SymPair,1440,0); OPEN=(DoubleToStr(OpenToday,DecNos)); 
   string PIPS=""; CLOSE=iClose(SymPair,1440,0); PIPS=DoubleToStr((CLOSE-OpenToday)/Point/pipsize,0);
   ADR1=0; ADR5=0; ADR10=0; ADR20=0; ADRavg=0; int a,b,c; int ypos=0;
                             ADR1=(iHigh(NULL,TimeFrame,1)-iLow(NULL,TimeFrame,1));
   for(a=1;a<= 5;a++)  ADR5= ADR5+(iHigh(NULL,TimeFrame,a)-iLow(NULL,TimeFrame,a));
   for(b=1;b<=10;b++) ADR10=ADR10+(iHigh(NULL,TimeFrame,b)-iLow(NULL,TimeFrame,b));
   for(c=1;c<=20;c++) ADR20=ADR20+(iHigh(NULL,TimeFrame,c)-iLow(NULL,TimeFrame,c));
   ADR5=ADR5/5;  ADR10=ADR10/10;  ADR20=ADR20/20;  ADRavg=(((ADR1+ADR5+ADR10+ADR20)/4))/Point/pipsize;
//+---Entry level Open Position--------------------------------------------------------------------------------------+
   double midlin1=iHigh(NULL,TimeFrame,0)-(iHigh(NULL,TimeFrame,0)-iLow(NULL,TimeFrame,0))*(60./100);
   double midlin2=iHigh(NULL,TimeFrame,0)-(iHigh(NULL,TimeFrame,0)-iLow(NULL,TimeFrame,0))*(15./100);
   double midlin3= iLow(NULL,TimeFrame,0)+(iHigh(NULL,TimeFrame,0)-iLow(NULL,TimeFrame,0))*(60./100);
   double midlin4= iLow(NULL,TimeFrame,0)+(iHigh(NULL,TimeFrame,0)-iLow(NULL,TimeFrame,0))*(15./100);
   string gap="                                          ",mgap="               ";
   double OpenUP=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(OpenPosPercent/100));
   double OpenDN=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(OpenPosPercent/100));
   if(showOpenClose){
   if(CLOSE>OpenToday){color clrOpen=clrLime; string commtx=" UP";}
                       else {clrOpen=clrCrimson;     commtx=" DN";}
   if(TX) iLabel(ID+"X001",StringConcatenate(gap+"OPEN"+commtx),clrOpen,OpenToday,0);
   if(TX) iLabel(ID+"X002",StringConcatenate(gap+mgap+"yClose"),clrOrange,yClose,0);}
   if(showOpenline){
   if(CLOSE>OpenToday){clrOpen=clrLime;} else clrOpen=clrCrimson;
   if(TX) iLine1(ID+"X003",clrOpen,OpenToday);}
   if(showCloseline){iLine1(ID+"X004",clrOrange,yClose);}
   if(showMidlines){
   if(TX) iLabel(ID+"X060",StringConcatenate(gap+"                      60lvl"),clrCrimson,midlin1,0); 
          iLine2(ID+"X061",clrCrimson,midlin1);
   if(TX) iLabel(ID+"X062",StringConcatenate(gap+"                      15lvl"),clrCrimson,midlin2,0); 
          iLine2(ID+"X063",clrCrimson,midlin2);
   if(TX) iLabel(ID+"X064",StringConcatenate(gap+"                      60lvl"),clrDodgerBlue,midlin3,0); 
          iLine2(ID+"X065",clrDodgerBlue,midlin3);
   if(TX) iLabel(ID+"X066",StringConcatenate(gap+"                      15lvl"),clrDodgerBlue,midlin4,0); 
          iLine2(ID+"X067",clrDodgerBlue,midlin4);}
   if(_Period<=PERIOD_H1){if(showOpenPoslevels){color colUP=OpenBUY,colDN=OpenSELL;
   if(TX) iLabel(ID+"X068",StringConcatenate(gap+"BUY"),colUP,OpenUP,0);   
   if(TX) iLabel(ID+"X069",StringConcatenate(gap+"SELL"),colDN,OpenDN,0);  
   if(showOpenPoslines){iLine1(ID+"X070",colUP,OpenUP); iLine1(ID+"X071",colDN,OpenDN);}}  WindowRedraw();}
//+---Primary and Secondary Targets----------------------------------------------------------------------------------+
   double D1H=iHigh(NULL,TimeFrame,1),D1L=iLow(NULL,TimeFrame,1);
   double TU1=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl1/100)),
          TD1=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl1/100)),
          TU2=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl2/100)),
          TD2=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl2/100)),
          TU3=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl3/100)),
          TD3=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl3/100)),
          TU4=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl4/100)),
          TD4=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl4/100)),
          TU5=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl5/100)),
          TD5=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl5/100)),
          TU6=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl6/100)),
          TD6=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl6/100)),
          TU7=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl7/100)),
          TD7=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl7/100)),
          TU8=OpenToday+(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl8/100)),
          TD8=OpenToday-(((ADR1+ADR5+ADR10+ADR20)/4)*(lvl8/100));
   if(showTARGETS){if(_Period<=PERIOD_H1){if(TX)
   if(showADRlines){iLine2(ID+"X010",ADRColUP,TU1);
                    iLine2(ID+"X011",ADRColUP,TU2);
                    iLine2(ID+"X012",ADRColUP,TU3);
                    iLine2(ID+"X013",ADRColUP,TU4);
                    iLine2(ID+"X014",ADRColUP,TU5);
                    iLine2(ID+"X015",ADRColUP,TU6);
                    iLine2(ID+"X016",ADRColUP,TU7);
                    iLine2(ID+"X017",ADRColUP,TU8);
                    iLine2(ID+"X018",ADRColDN,TD1);
                    iLine2(ID+"X019",ADRColDN,TD2);
                    iLine2(ID+"X020",ADRColDN,TD3);
                    iLine2(ID+"X021",ADRColDN,TD4);
                    iLine2(ID+"X022",ADRColDN,TD5);
                    iLine2(ID+"X023",ADRColDN,TD6);
                    iLine2(ID+"X024",ADRColDN,TD7);
                    iLine2(ID+"X025",ADRColDN,TD8);}
   iLabel(ID+"X030",StringConcatenate(gap+DoubleToStr(lvl1,1)+"%"),ADRColUP,TU1,0); 
   if(TX) 
   iLabel(ID+"X031",StringConcatenate(gap+DoubleToStr(lvl2,1)+"%"),ADRColUP,TU2,0); 
   if(TX) 
   iLabel(ID+"X032",StringConcatenate(gap+DoubleToStr(lvl3,1)+"%"),ADRColUP,TU3,0); 
   if(TX) 
   iLabel(ID+"X033",StringConcatenate(gap+DoubleToStr(lvl4,1)+"%"),ADRColUP,TU4,0); 
   if(TX) 
   iLabel(ID+"X034",StringConcatenate(gap+DoubleToStr(lvl5,1)+"%"),ADRColUP,TU5,0); 
   if(TX) 
   iLabel(ID+"X035",StringConcatenate(gap+DoubleToStr(lvl6,1)+"%"),ADRColUP,TU6,0); 
   if(TX)
   iLabel(ID+"X036",StringConcatenate(gap+DoubleToStr(lvl7,1)+"%"),ADRColUP,TU7,0); 
   if(TX)
   iLabel(ID+"X037",StringConcatenate(gap+DoubleToStr(lvl8,1)+"%"),ADRColUP,TU8,0); 
   if(TX)
   iLabel(ID+"X038",StringConcatenate(gap+DoubleToStr(lvl1,1)+"%"),ADRColDN,TD1,0); 
   if(TX) 
   iLabel(ID+"X039",StringConcatenate(gap+DoubleToStr(lvl2,1)+"%"),ADRColDN,TD2,0); 
   if(TX) 
   iLabel(ID+"X040",StringConcatenate(gap+DoubleToStr(lvl3,1)+"%"),ADRColDN,TD3,0); 
   if(TX) 
   iLabel(ID+"X041",StringConcatenate(gap+DoubleToStr(lvl4,1)+"%"),ADRColDN,TD4,0); 
   if(TX) 
   iLabel(ID+"X042",StringConcatenate(gap+DoubleToStr(lvl5,1)+"%"),ADRColDN,TD5,0); 
   if(TX) 
   iLabel(ID+"X043",StringConcatenate(gap+DoubleToStr(lvl6,1)+"%"),ADRColDN,TD6,0);
   if(TX) 
   iLabel(ID+"X044",StringConcatenate(gap+DoubleToStr(lvl7,1)+"%"),ADRColDN,TD7,0);
   if(TX) 
   iLabel(ID+"X045",StringConcatenate(gap+DoubleToStr(lvl8,1)+"%"),ADRColDN,TD8,0);}}
   if(ShowPrevHiLo){if(_Period<=PERIOD_H1){
   if(TX) iLabel(ID+"X046",StringConcatenate(gap+mgap+"yHigh"),Previous,D1H,0);
   if(TX) iLabel(ID+"X047",StringConcatenate(gap+mgap+"yLow") ,Previous,D1L,0);
   if(showADRlines){ 
   iLine2(ID+"X048",Previous,D1H);
   iLine2(ID+"X049",Previous,D1L);}}}
//+-------------------------------------------------------------------------------------------------------------------+
   return(rates_total);}//End OnCalculate
//+----iLine1 Function------------------------------------------------------------------------------------------------+
   void iLine1(string tls1, color a_color_8, double ad_12){
   if(ObjectFind(tls1)!=0) ObjectDelete(tls1); ObjectCreate(tls1,OBJ_TREND,0,
   iTime(NULL,TimeFrame,0),ad_12,iTime(NULL,TimeFrame,0) +60*TimeFrame*RayLength,ad_12);
           ObjectSet(tls1,OBJPROP_WIDTH,OrderLineWidth);
           ObjectSet(tls1,OBJPROP_STYLE,PrevOpenStyle);  
           ObjectSet(tls1,OBJPROP_COLOR,a_color_8);
           ObjectSet(tls1,OBJPROP_SELECTABLE,FALSE);
           ObjectSet(tls1,OBJPROP_RAY,FALSE);
           ObjectSet(tls1,OBJPROP_BACK,true);
  ObjectSetInteger(0,tls1,OBJPROP_SELECTABLE,false);
  ObjectSetInteger(0,tls1,OBJPROP_SELECTED,false);
   ObjectSetString(0,tls1,OBJPROP_TOOLTIP,"\n");}
//+----iLine2 Function------------------------------------------------------------------------------------------------+
   void iLine2(string tls2, color a_color_8, double ad_12){
   if(ObjectFind(tls2)!=0) ObjectDelete(tls2); ObjectCreate(tls2,OBJ_TREND,0,
   iTime(NULL,TimeFrame,0),ad_12,iTime(NULL,TimeFrame,0) +60*TimeFrame*RayLength,ad_12);
       ObjectSet(tls2,OBJPROP_WIDTH,ADRLineWidth);
       ObjectSet(tls2,OBJPROP_STYLE,ADRStyle);  
       ObjectSet(tls2,OBJPROP_COLOR,a_color_8);
       ObjectSet(tls2,OBJPROP_SELECTABLE,FALSE);
       ObjectSet(tls2,OBJPROP_RAY,false);
       ObjectSet(tls2,OBJPROP_BACK,true);
  ObjectSetInteger(0,tls2,OBJPROP_SELECTABLE,false);
  ObjectSetInteger(0,tls2,OBJPROP_SELECTED,false);
   ObjectSetString(0,tls2,OBJPROP_TOOLTIP,"\n");}
//+----iLabel Function-----------------------------------------------------------------------------------------------+
   void iLabel(string name="Labelx",string text=" ",color bcolor=0,double xdist=0,int ydist=0){
   if(ObjectFind(name)!=0) ObjectDelete(name);
    ObjectCreate(name,OBJ_TEXT,0,0,0);
      ObjectMove(name,0,Time[0+LABELmove],xdist+(Point*1));
    //ObjectCreate(name,OBJ_TEXT,0,Time[0],xdist);
   ObjectSetText(name,text,TextSize+2,"Consolas Bold",bcolor);
       ObjectSet(name,OBJPROP_SELECTABLE,FALSE);
  ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
  ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
   ObjectSetString(0,name,OBJPROP_TOOLTIP,"\n");
       ObjectSet(name,OBJPROP_BACK,true);}
//+---Timeframe Function---------------------------------------------------------------------------------------------+
   string sTfTable[]= {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
   int    iTfTable[]= {1,5,15,30,60,240,1440,10080,43200};
//+------------------------------------------------------------------------------------------------------------------+
   int stringToTimeFrame(string tfs){ tfs=stringUpperCase(tfs);  for(int i=ArraySize(iTfTable)-1; i>=0; i--)
   if(tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],_Period));  return(_Period);}
//+------------------------------------------------------------------------------------------------------------------+
   string timeFrameToString(int tf){
   for(int i=ArraySize(iTfTable)-1;i>=0;i--)  if(tf==iTfTable[i]) return(sTfTable[i]); return("");}
//+------------------------------------------------------------------------------------------------------------------+
   string stringUpperCase(string str){ string s=str; for(int length=StringLen(str)-1; length>=0; length--){
   int tchar=StringGetChar(s,length); if((tchar>96 && tchar<123) || (tchar>223 && tchar<256))
   s=StringSetChar(s,length,tchar-32); else if(tchar>-33 && tchar<0) s=StringSetChar(s,length,tchar+224);} return(s);}
//+----Clean Chart Function------------------------------------------------------------------------------------------+
   void CleanUpIsle1(){string name; for(int s=ObjectsTotal()-1; s>=0; s--){name=ObjectName(s);
   if(StringSubstr(name,0,StringLen(ID))==ID) {ObjectDelete(name);}}}//EOF
//+------------------------------------------------------------------------------------------------------------------+
   int BoolNewTF(){ datetime BarOpenTime=iTime(NULL,PERIOD_M1,0);
   if(BarTime==0) BarTime=BarOpenTime;
   if(BarTime!=BarOpenTime){ BarTime=BarOpenTime;  return(1);}  else  return(0);}
//+------------------------------------------------------------------------------------------------------------------+